
νλ‘κ·Έλλ¨Έλ€μ΄ νλ‘κ·Έλ¨μ λ¨μν 'μμ±'λ§ νλ€λ©΄ λͺ¨λ μ¬λλ€μ΄ λ§μ‘±ν μ μλκ°?
μ λν΄ μκ°ν΄λ³Έλ€λ©΄ λΉμ°ν λ΅μ μλλ€ :
μ¬μ©μλ μ ννκ³ λΉ λ₯Έ μννΈμ¨μ΄λ₯Ό κΈ°λνλ€.
μλ΅μ΄ 1μ΄κ° 3μ΄λ‘λ§ λμ΄λλ μ΄νλ₯ μ΄ νλ€.
μ¬λμμ λ³΄λΈ λλ΄ λ©μμ§κ° λ΄ νμμ΄ μλλΌ μ½μΉλκ» κ°λ λ²κ·Έμ²λΌ, λλ¦Όκ³Ό μ€λ₯λ‘ μΈν΄
μ무λ ν΄λΉ νλ‘κ·Έλ¨μ μ¬μ©νμ§ μμ κ²μ΄λ€.
λ°λΌμ μ°λ¦¬λ λͺ¨λ ν©λ¦¬μ νκ²½μμ μ νμ±κ³Ό μλλ₯Ό λμμ λ¬μ±ν΄μΌ νλ€.
μ΄λ₯Ό μν΄ λ¬΄μμ μΈ‘μ νκ³ , μ΄λλ₯Ό μ€μ΄λ©°,
μ΄λ€ μμλ‘ κ°μ ν μ§ μ²΄κ³μ μΈ μ΅μ ν λ°©λ²μ μ΄ν΄λ³΄λ €κ³ νλ€.
첫째, μ μ ν μκ³ λ¦¬μ¦κ³Ό μλ£κ΅¬μ‘°λ₯Ό μ ννλ€.
λμ§Έ, μ»΄νμΌλ¬κ° ν¨κ³Όμ μΌλ‘ μ΅μ νν΄μ ν¨μ¨μ μΈ μ€νμ½λλ‘ λ°κΏ μ μλ μμ€μ½λλ₯Ό μμ±ν΄μΌ νλ€.
첫째, μ΄λ»κ² μ½λκ° μ¬μ©λκ³ μ΄λ€ κ²°μ μ μΈ μμλ€μ΄ μν₯μ λΌμΉλκ°λ₯Ό κ³ λ €ν΄μΌ νλ€.
λμ§Έ, μ΄λ»κ² νλ©΄ ꡬνκ³Ό μ μ§λ₯Ό μ½κ²ν μ§, λμμ μ΄λ»κ² λ 빨리 λ릴 μ μμμ§ μ¬μ΄μμ ννν΄μΌ νλ€.
첫째, μ½λκ° μνν΄μΌ νλ μμ μ ν¨μ¨μ μΌλ‘ μννλλ‘ λΆνμν μμ μ μ κ±°ν΄μΌ νλ€.
λμ§Έ, μ»΄νμΌλ¬λ κ³μν΄μ λ₯λ ₯μ΄ κ°±μ λκ³ κ°μ λλ―λ‘ μ»΄νμΌλ¬κ° ν¨μ¨μ μΈ μ½λλ₯Ό μμ±ν μ μλ μ λμ μ΅μνμ μμ λ§ νλ€.
-Og(κΈ°λ³Έ), -O1, -O2, -O3λ‘ κ°μλ‘ κ³΅κ²©μ μΈ μ΅μ ν μνμ΅μ ν μμ€μ΄ λμΌλ©΄ ν¨μ¬ μ°μν CμΈμ΄λ₯Ό μμ±νκ³ , μ±λ₯μ κ°μ ν μ μλ€.
λ€λ§ λλ²κ·Έκ° μ΄λ €μμ§λ€.
**μ΅μ ν μμ€μ΄ λλ€ = μ μμ€ μΈμ΄μ κ°κΉλ€**
λλ²κ±°λ κΈ°κ³κ° μλ μ¬λμ μ
μ₯μμ νλ‘κ·Έλ¨μ κ΄μ°°νκΈ° μν λ²μκΈ°μ΄λ€.
μ¦, μ΅μ ν μμ€μ΄ λμμ§λ€λ©΄ μλμ μμ€μ½λμ λ³νκ° λ§μμ§κΈ° λλ¬Έμ λ§€ννκΈ° μ΄λ ΅κΈ° λλ¬Έμ΄λ€.
νμ§λ§ μ΅μ ν μ΅μ
μ μ무리 μ λΉνκ² λμΈλ€κ³ ν΄λ, λͺ¨λ μν©μμ μ΅κ³ μ μ±λ₯μ 보μ₯νμ§ μλλ€.
μ½λ ꡬ쑰λ λ°μ΄ν° μ κ·Ό λ°©μμ λ°λΌ μ»΄νμΌλ¬κ° μ μ©ν μ μλ μ΅μ νμ νκ³κ° μκΈ° λλ¬Έμ΄λ€.
μ΄λ¬ν νκ³λ₯Ό λ§λλ λνμ μΈ μμΈλ€μ΄ λ°λ‘ λ€μκ³Ό κ°λ€.
λ©λͺ¨λ¦¬ λ³μΉ: ν¬μΈν° κ°μ κ΄κ³λ₯Ό νμ νκΈ° μ΄λ ΅κΈ° λλ¬Έμ 보μμ μΌλ‘ μ²λ¦¬ν μ μλ€.
ν¨μ νΈμΆ: νΈμΆ μ€λ²ν€λμ μΈλΆ μν₯(μ μ λ³μ λ³κ²½ λ±) λλ¬Έμ μ΅μ νκ° μ νλ μ μλ€.
κ·Έλ λ€λ©΄ μ΅μ νλ₯Ό μ νμ©νλ €λ©΄ μ΄μ λ¨μν μ»΄νμΌλ¬ μ΅μ μλ§ μμ‘΄νλ κ²μ΄ μλλΌ νμ¬ μ½λκ° μ΄λ λΆλΆμμ λ³λͺ©μ΄ λ°μνλμ§λ₯Ό νμ νκ³ , μ΄λ₯Ό μμΉλ‘ ννν΄ λΆμνλ κ³Όμ μ΄ νμνλ€.
μ΄ κ³Όμ μ΄ μμ΄μΌ μ½λ ꡬ쑰 λ³κ²½μ΄λ μκ³ λ¦¬μ¦ κ°μ μ΄ μ€μ μ±λ₯ ν₯μμΌλ‘ μ΄μ΄μ‘λμ§ κ°κ΄μ μΌλ‘ νμΈν μ μλ€. μ΄λ¬ν μ±λ₯ λΆμμλ λ€μν μ§νκ° μ¬μ©λλλ°, νλμ μμκ° λ°λ‘ CPEμ΄λ€.
: λ°μ΄ν° 1κ°λ₯Ό μ²λ¦¬νλ λ° νμν νκ· CPU μ¬μ΄ν΄ μλ‘ μμλΉ μΈ‘μ μ¬μ΄ν΄μ΄λΌκ³ λ νλ€.
// κΈ°λ³Έ 루ν
void psum1(float a[], float p[], long n) {
p[0] = a[0];
for (long i = 1; i < n; i++)
p[i] = p[i-1] + a[i]; //νλ²μ λ°λ³΅λ¬Έμ 1κ°μ μμλ§ μ²λ¦¬
}
// 루ν μ κ° μ μ©
void psum2(float a[], float p[], long n) {
p[0] = a[0];
for (long i = 1; i < n-1; i += 2) {
float mid = p[i-1] + a[i];
p[i] = mid;
p[i+1] = mid + a[i+1]; //νλ²μ λ°λ³΅λ¬Έμ 2κ°μ μμ μ²λ¦¬
}
}
psum1: CPE β 9.0 psum2: CPE β 6.0 β μ±λ₯ ν₯μμ΄ λ κ²μ νμΈ ν μ μλ€.μμ μ½λμμ λ³Ό μ μλ κ²μ²λΌ
1. λ°λ³΅λ¬Έ μμ μμ
μ΄ 1κ°μΈ κ²½μ°λ μμλΉ μ¬μ΄ν΄μ μμ λ°λ³΅λΉ μ¬μ΄ν΄μ μκ° κ°λ€.
2. λ°λ³΅λ¬Έ μμ μ¬λ¬κ°μ μμ
μ΄ μλ κ²½μ° μμλΉ μ¬μ΄ν΄μ μλ λ°λ³΅λΉ μ¬μ΄ν΄μ μλ³΄λ€ λ μλ€.
μ¦, μ°λ¦¬κ° κΆκΈν건 λ°μ΄ν° 1κ°λ₯Ό μ²λ¦¬νλλ° κ±Έλ¦¬λ μκ°μ΄λ―λ‘
루ν μ κ°μ μ±λ₯μ°¨μ΄λ₯Ό νμΈν μ μλ CPEλ₯Ό νμΈνλ κ²μ΄ λ μ’μ κ²μ΄λ€.
μλ μμ λ μ§κΈκΉμ§ λ°°μ΄ μ΅μ ν κΈ°λ² μ μ© μ Β·νμ μ±λ₯ μ°¨μ΄λ₯Ό μ΄ν΄νκΈ° μν κΈ°μ μ½λμ΄λ€.
νμ¬ μνμμλ μ½λ ꡬ쑰μ λΆνμν ν¨μ νΈμΆκ³Ό λ©λͺ¨λ¦¬ μ κ·Όμ΄ ν¬ν¨λμ΄ μμ΄,
μ»΄νμΌλ¬κ° μΆ©λΆν μ΅μ ννμ§ λͺ»νλ€.
int get_vec_element(vec_ptr v, long index, data_t *dest)
{
if (index < 0 || index >= v->len)
return 0;
*dest = v->data[index];
return 1;
}
if (index < 0 || index >= v->len) : μμ ν μ₯μΉμ΄κΈ°λ νλ λ§€λ² μΈλ±μ€ κ²μ¬λ₯Ό νκΈ° λλ¬Έμ ν¨μ νΈμΆ μ€λ²ν€λλ₯Ό λ°μμν€κ³ μλ€.void combine1(vec_ptr v, data_t *dest) {
*dest = IDENT;
for (long i = 0; i < vec_length(v); i++) {
data_t val;
get_vec_element(v, i, &val);
*dest = *dest OP val;
}
}
vec_length() : λ²‘ν° κΈΈμ΄κ° λ³ν μΌμ΄ μλλ° λ§€λ² κΈΈμ΄λ₯Ό κ³μ°νλ ν¨μλ₯Ό νΈμΆν¨μΌλ‘μ¨,
ν¨μνΈμΆμ€λ²ν€λ λ° λΆνμν λ©λͺ¨λ¦¬ μ κ·Όμ λ°μμν€κ³ μλ€.
*dest = *dest OP val; : λ§€λ² λ©λͺ¨λ¦¬μμ ν΄λΉ λ³μμ μμΉλ₯Ό μ½κ³ λ§€λ² λ€μ μ°λ©΄μ
λΆνμν λ©λͺ¨λ¦¬ μ κ·Όμ λ°μμν€κ³ μλ€.
μ΄μ²λΌ λ¨μν μΆμ μλ£ν κΈ°λ° κ΅¬νμμλ,
μμ μ€κ³ μ νλ€μ΄ ν¨μ νΈμΆ μ€λ²ν€λμ λΆνμν λ©λͺ¨λ¦¬ μ κ·Όμ λ§λ€ μ μλ€.
λ€μ κΈμμλΆν° μ΄ κΈ°μ μ½λλ₯Ό λ°νμΌλ‘ ꡬ체μ μΈ μ΅μ ν κΈ°λ²μ μ μ©νκ³ ,
CPEμ κ°μ μ§νλ‘ μ±λ₯ ν₯μμ μΈ‘μ νλ κ³Όμ μ μ΄ν΄λ³΄λ €κ³ νλ€.