OpenACC——數據子語(present,copy,copyin,copyout,create,private,firstprivate,default)

present子語:

例:#pragma acc kernels present(a),表明在進入構件區域之前,變量a已在設備上開闢內存。

copy子語:

例:#pragma acc kernels copy(a),當進入kernels構件區域時,如果設備上已經爲a變量開闢了內存,則只需要將數據傳輸過去;如果設備沒有爲變量a開闢內存,則在設備上爲a開闢內存並將數據傳輸過去,離開kernels構件區域時,將設備上的a變量的數據,複製回主機的a變量上,並釋放設備內存。

copyin子語:

例:#pragma acc kernels copyin(a),當進入kernels構件區域時,如果設備上已經爲a變量開闢了內存,則不需要將數據傳輸過去;如果設備沒有爲變量a開闢內存,在設備上爲a開闢內存並將數據傳輸過去,在離開kernels構件區域時,不進行任何複製操作,並釋放設備內存。

copyout子語:

例:#pragma acc kernels copyout(a),當進入kernels構件區域時,如果設備上已經爲a變量開闢了內存,則沒啥了,不必傳輸數據;如果設備沒有爲變量a開闢內存,在設備上爲a開闢內存,不必傳輸數據。在離開kernels構件區域時,將設備上的a變量的數據,複製回主機的a變量上,並釋放設備內存。

 create子語:

例:#pragma acc kernels creat(a),當進入kernels構件區域時,如果設備上已經爲a變量開闢了內存,則沒啥了,不必傳輸數據;如果設備沒有爲變量a開闢內存,在設備上爲a開闢內存,不必傳輸數據。在離開kernels構件區域時,釋放設備內存。

private子語:

例:#pragma acc kernels private(a),當進入kernels構件區域時,每個迭代步會分配一個變量a的副本,這樣可以互不干擾,並行訪問。

firstprivate子語:

例:#pragma acc kernels firstprivate(a),當進入kernels構件區域時,將構件區域之外的變量a的值,帶入到構件區域內。

default子語:

default(present)表示沒有xian'shi顯式指定數據屬性的變量都已經存在於設備中,default(none)表示所有的變量都必須顯式的制定數據屬性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章