0
私は非常に大きな配列型(short *)を持っています。どのようにしてすべての値を定数で最も速く減算するのですか? forループを使用してポインタ配列を定数で減算する最速の方法
私は非常に大きな配列型(short *)を持っています。どのようにしてすべての値を定数で最も速く減算するのですか? forループを使用してポインタ配列を定数で減算する最速の方法
が実際にこの
short *arr = new short[1000000];
const short c = 8504;
//populate the array
Populate(arr); //just some method to populate the array
for(int i=0;i<1000000;i++){
arr[i] = c - arr[i] ;//subtract from the constant
//or even
//*arr = c - *arr++ ;
}
にこのコードを実行するための最も効率的な方法であるかのタイプのオーバーフローをチェックしません。
あなたが実際の値を再計算する必要がない場合は、使用状況にアドホックそれを計算することができますが:
#include <iostream>
using namespace std;
struct OffsetShort {
short value;
static short offset;
operator short() const { return value - offset; }
};
short OffsetShort::offset = 0;
int main() {
OffsetShort *vals[] = {new OffsetShort{1},new OffsetShort{2},new OffsetShort{3}};
for (auto f : vals) {
cout << *f;
}
OffsetShort::offset = 10;
for (auto f : vals) {
cout << *f;
}
return 0;
}
これはあなたがポインタから減算したい
123
-9-8-7
を出力しますか?ポインタが指す値?いくつかのデータと期待される結果の例を表示できますか? –
うーん、for-loopの何が問題なの?本当にスピードが必要な場合は、おそらくスレッドが役立ちますか?配列を分割していくつかのスレッドを作成してチャンクで減算を実行します – smac89
@ smac89スレッドが複数のコアを持つ場合にのみ役立ちます。そうしないと、スレッドを維持するオーバーヘッドによって処理が遅くなります。 –