我想讀取內存位置而不污染緩存。我正在使用X86 Linux機器。我試着用MOVNTDQA彙編指令:如何從內存中加載值而不污染緩存?
asm("movntdqa %[source], %[dest] \n\t"
: [dest] "=x" (my_var) : [source] "m" (my_mem[0]) : "memory");
my_mem是int *分配新,my_var是一個int。
我有兩個問題,這種方法:
- 代碼編譯,但在運行它時我收到「非法指令」的錯誤。任何想法爲什麼?
- 我不確定什麼類型的內存分配新的。我會假設WB。根據文檔,MOVNTDQA指令將只能使用USWC存儲器類型。我怎麼知道我正在使用哪種內存類型?
總之,我的問題是:
我怎麼能不污染的X86機器上的緩存讀取一個存儲器位置?我的方法是否朝着正確的方向發展,是否可以固定下來?
謝謝。
與此問題相關嗎? HTTP://計算器。COM /問題/ 851286 /如何使用的,movntdqa到避免緩存污染 – sharptooth 2009-08-12 10:57:11
我想這是相關的:),但不幸的是,這個問題/答案並不能幫助我這個問題。 – Anna 2009-08-12 11:04:49
哦,還有一件事:我不確定甚至有可能做到這一點: - /我當然希望它是。 – Anna 2009-08-12 11:06:42